package com.sh.rpc.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.setting.dialect.Props;

/**
 * 配置工具类
 */
public class ConfigUtils {

    /**
     * 加载配置对象
     */
    public static <T> T loadConfig(Class<T> tClass, String prefix){
        return loadConfig(tClass, prefix , "");
    }

    /**
     * 加载指定配置文件   把数据放到写的 RpcConfig 配置类里面
     * 配置文件中带有 '前缀' 的值 给指定对象 tClass
     * 这里默认是 application.properties 文件
     * 如果加 - 后缀 就可以加载指定配置文件
     * @param tClass  类
     * @param prefix  前缀
     * @param environment  环境
     * @return
     * @param <T>
     * 如果传入的environment参数为空，属性文件名为 “application.properties”。
     * 如果传入的environment参数不为空，属性文件名为 “application-<environment>.properties”，
     * 其中<environment>是传入的具体环境参数值。
     * todo 这是读取配置文件的地方
     */
    public static <T> T loadConfig(Class<T> tClass, String prefix ,String environment){
        StringBuilder configFileBuilder = new StringBuilder("application");
        if ( StrUtil.isNotBlank(environment)){
            // StrUtil.isNotBlank(environment)  判断 environment 是否为空
            configFileBuilder.append("-").append(environment);
        }
        configFileBuilder.append(".properties");
        Props props = new Props(configFileBuilder.toString());
        /**
         * prefix参数可能用于指定在配置信息中的特定前缀，以便在转换过程中只选取与特定前缀相关的配置项来构建目标对象。
         */
        return props.toBean(tClass, prefix);   // 特定属性前缀 sh_rpc 的值给对象  会改变对象的默认值
    }
}
